"I am eight years old."
Translation:Yo tengo ocho años.
Because in Spanish, you say "I have __ years." when you talk about how old you are. It's just a difference in phrasing between the two languages.
To understand why you say "tengo tres años" you need to know that cumpleaños means completed years. Thus you have (completed) three years.
And cumpleaños translates as birthday. So I believe tufteboy is saying the Spanish meaning is that, on reaching your third birthday, you have three years completed.
I think also that your age is viewed as a characteristic of you, something you possess, so it is something you have rather than something you are, as is said in English.